package com.ruoyi.web.controller.smy;

import cn.hutool.core.collection.CollectionUtil;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.smy.MallAdvertis;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.dto.OptDto;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.file.ImageUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.service.smy.IMallAdvertisService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Objects;

@RestController
@RequestMapping(value = "/smy/mallAdvertising")
public class MallAdvertisingController extends BaseController {
	@Resource
	private IMallAdvertisService mallAdvertisingService;

	@Value("${microApp.imageUrl}")
	private String microImageUrl;

	@PreAuthorize("@ss.hasPermi('smy:advertising:list')")
	@GetMapping("/list")
	public TableDataInfo list(MallAdvertis mallAdvertis) {
		startPage();
		List<MallAdvertis> list = mallAdvertisingService.selectMallAdvertisList(mallAdvertis);
		if(CollectionUtil.isNotEmpty(list)){
			for(MallAdvertis advertising : list){
				advertising.setImage(ImageUtils.filterFileName(advertising.getImage(),microImageUrl));
			}
		}
		return getDataTable(list);
	}

	@PreAuthorize("@ss.hasPermi('smy:advertising:export')")
	@Log(title = "【请填写功能名称】", businessType = BusinessType.EXPORT)
	@PostMapping("/export")
	public void export(HttpServletResponse response, MallAdvertis mallAdvertis) {
		List<MallAdvertis> list = mallAdvertisingService.selectMallAdvertisList(mallAdvertis);
		ExcelUtil<MallAdvertis> util = new ExcelUtil<MallAdvertis>(MallAdvertis.class);
		util.exportExcel(response, list, "【请填写功能名称】数据");
	}

	@PreAuthorize("@ss.hasPermi('smy:advertising:query')")
	@GetMapping(value = "/{id}")
	public AjaxResult getInfo(@PathVariable("id") Long id) {
		MallAdvertis mallAdvertis = mallAdvertisingService.selectMallAdvertisById(id);
		if(Objects.nonNull(mallAdvertis)){
			mallAdvertis.setImage(ImageUtils.filterFileName(mallAdvertis.getImage(),microImageUrl));
		}
		return AjaxResult.success(mallAdvertis);
	}

	@PreAuthorize("@ss.hasPermi('smy:advertising:add')")
	@Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
	@PostMapping
	public AjaxResult add(@RequestBody MallAdvertis mallAdvertis) {
		return toAjax(mallAdvertisingService.insertMallAdvertis(mallAdvertis));
	}

	@PreAuthorize("@ss.hasPermi('smy:advertising:edit')")
	@Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE)
	@PutMapping
	public AjaxResult edit(@RequestBody MallAdvertis mallAdvertis) {
		return toAjax(mallAdvertisingService.updateMallAdvertis(mallAdvertis));
	}

	@PreAuthorize("@ss.hasPermi('smy:advertising:remove')")
	@Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE)
	@DeleteMapping("/{ids}")
	public AjaxResult remove(@PathVariable Long[] ids) {
		return toAjax(mallAdvertisingService.deleteMallAdvertisByIds(ids));
	}

	@PreAuthorize("@ss.hasPermi('smy:advertising:edit')")
	@Log(title = "上下架广告", businessType = BusinessType.UPDATE)
	@PostMapping(value = "/changeAdvertisingStatus")
	public AjaxResult changeAdvertisingStatus(@RequestBody OptDto optDto) {

		try {
			mallAdvertisingService.changeAdvertisingStatus(optDto);
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("上下架广告异常:{}",e);
			return AjaxResult.error(e.getMessage());
		}

		return AjaxResult.success();
	}
}
